feat(calendar): redesign calendar apps using plain HTML/CSS/TS + Web Components#717
feat(calendar): redesign calendar apps using plain HTML/CSS/TS + Web Components#717nicomiguelino merged 48 commits intomasterfrom
Conversation
- Migrate from Vue 3 + Pinia to framework-free Web Components - Add reusable weekly-calendar-view custom element to edge-apps-library Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
PR Reviewer Guide 🔍(Review updated until commit 60f9ed0)Here are some key observations to aid the review process:
|
PR Code Suggestions ✨Latest suggestions up to 60f9ed0
Previous suggestionsSuggestions up to commit 7378c5c
|
- Fix missing error cause in events.ts - Extract CSS and utility functions into separate files to satisfy max-lines rules - Add e2e screenshots Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… file - Update `.this-week-title` to Inter Regular (weight 400), normal style, centered, with letter-spacing - Remove unused `weekly-calendar-view.css` (CSS lives in `weekly-calendar-view-styles.ts`)
- Increase day name font size to 0.98rem with line-height 1.333 - Increase day date font size to 1.469rem with line-height 1.556 - Add opacity 0.8 to today's day name - Increase day header height and time gutter padding-top to 5.225rem - Increase time gutter width to 6.5rem and padding-right to 1rem - Match time label font size to day name (0.98rem)
- Set day-body overflow to visible so the time indicator dot is not clipped - Adjust current time indicator dot left offset to -0.27rem - Remove horizontal margin from .header to fix app header alignment
- Force landscape orientation with letterbox bars and vertical centering - Fix app header margins and compact event display for short events - Fix timezone-aware day header date and locale-aware day names - Match Figma design tokens for event card and title styles
- Replace --calendar-accent-color with --theme-color-primary - Style app-header background and text color from theme - Make weekly-calendar-view background transparent
- Add `daily-calendar-view` Web Component with same styling as weekly view - Add `calendar-view-utils.ts` with shared `buildTimeGutter` and `buildEventElement` - Extract `filterEventsForWindow` into shared utils to eliminate duplication - Support `calendar_mode` setting to switch between weekly and daily views Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add `schedule-calendar-view` Web Component showing today/tomorrow events - Move `calendar-view-utils.ts` to components root (shared by all views) - Fix `generateTimeSlots` to use configured timezone for time labels - Support `schedule` as default `calendar_mode` in calendar app Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add per-mode screenshot loops (schedule, weekly, daily)
- Rename files from `WxH.png` to `{mode}-WxH.png`
- Enrich ICS mock data with more events for schedule view
- Set screenly_color_accent to #2E8B57 in mock settings
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Move icon.svg from static/ to static/img/ - Update icon URL in manifest files to match new path - Remove unused bg.webp from static/images/ Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Rename calendar-new to calendar, replacing the old Vue 3/Pinia app - Add schedule, weekly, and daily calendar views as Web Components - Remove Vue, Vite, and blueprint dependencies - Update build tooling to use edge-apps-scripts Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
This PR migrates the Calendar edge app from a Vue 3 + Pinia implementation to framework-free Web Components, and introduces reusable calendar view components in edge-apps-library (daily/weekly/schedule) with shared event layout + rendering utilities.
Changes:
- Add
<weekly-calendar-view>,<daily-calendar-view>, and<schedule-calendar-view>Web Components (plus shared event layout + DOM builder utilities) toedge-apps-library. - Rewrite the Calendar app to render those components from plain HTML/CSS/TS, including new screenshot-test coverage and updated assets.
- Remove Vue/Vite/Vitest/Pinia scaffolding from the Calendar app and update manifests/docs accordingly.
Reviewed changes
Copilot reviewed 46 out of 87 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| edge-apps/edge-apps-library/src/components/weekly-calendar-view/weekly-calendar-view.ts | New weekly view Web Component rendering a 7-day grid with event layout + current-time indicator. |
| edge-apps/edge-apps-library/src/components/weekly-calendar-view/weekly-calendar-view-utils.ts | Shared helpers for windowing, slot generation, event styling/clipping, and safe attribute setting. |
| edge-apps/edge-apps-library/src/components/weekly-calendar-view/weekly-calendar-view-styles.ts | Shadow-DOM CSS for the weekly view. |
| edge-apps/edge-apps-library/src/components/weekly-calendar-view/index.ts | Public exports for weekly view component + event type. |
| edge-apps/edge-apps-library/src/components/weekly-calendar-view/event-layout.ts | Event overlap clustering + column layout algorithm for time-grid views. |
| edge-apps/edge-apps-library/src/components/vite-env.d.ts | Add *.css?inline module typing for component CSS imports. |
| edge-apps/edge-apps-library/src/components/schedule-calendar-view/schedule-calendar-view.ts | New schedule list view Web Component (today + tomorrow, capped). |
| edge-apps/edge-apps-library/src/components/schedule-calendar-view/schedule-calendar-view-styles.ts | Shadow-DOM CSS for the schedule view. |
| edge-apps/edge-apps-library/src/components/schedule-calendar-view/index.ts | Public export for schedule view component. |
| edge-apps/edge-apps-library/src/components/daily-calendar-view/daily-calendar-view.ts | New daily view Web Component (12-hour window, event layout, current-time indicator). |
| edge-apps/edge-apps-library/src/components/daily-calendar-view/daily-calendar-view-styles.ts | Shadow-DOM CSS for the daily view. |
| edge-apps/edge-apps-library/src/components/daily-calendar-view/index.ts | Public export for daily view component. |
| edge-apps/edge-apps-library/src/components/calendar-view-utils.ts | Shared DOM builders for time gutter + event cards used by daily/weekly views. |
| edge-apps/edge-apps-library/src/components/register.ts | Register new calendar custom elements alongside existing components. |
| edge-apps/edge-apps-library/src/components/index.ts | Export new calendar view components (and CalendarEvent type) from the library entrypoint. |
| edge-apps/edge-apps-library/package.json | Add dayjs dependency needed by the new components/utilities. |
| edge-apps/edge-apps-library/bun.lock | Lockfile update for added dependency. |
| edge-apps/calendar/src/types.ts | New local types (CalendarEvent, ViewMode, VIEW_MODE) for the rewritten app. |
| edge-apps/calendar/src/main.ts | Rewrite app bootstrap to use Web Components, theme/error setup, and periodic ticking/refresh. |
| edge-apps/calendar/src/events.ts | Update iCal fetching/parsing to be framework-free and accept explicit timezone input. |
| edge-apps/calendar/src/css/style.css | New global app styles (layout + view switching via .active). |
| edge-apps/calendar/index.html | Replace Vue mount point with static layout using auto-scaler, app-header, and calendar view elements. |
| edge-apps/calendar/package.json | Switch scripts/tooling to edge-apps-scripts workflow; remove Vue/Pinia/Vitest plumbing. |
| edge-apps/calendar/README.md | Update deployment/dev/testing/screenshot instructions for the new architecture. |
| edge-apps/calendar/e2e/screenshots.spec.ts | Add Playwright-based screenshot generation test across modes and resolutions. |
| edge-apps/calendar/screenly.yml | Update manifest icon URL path. |
| edge-apps/calendar/screenly_qc.yml | Update QC manifest icon URL path. |
| edge-apps/calendar/.ignore | Add ignore file for deployment packaging (node_modules). |
| edge-apps/calendar/.gitignore | Add gitignore for build artifacts/logs/etc. |
| edge-apps/calendar/vitest.config.ts | Remove Vitest config (no longer using Vitest). |
| edge-apps/calendar/vite.config.ts | Remove Vite config (now handled by edge-apps-scripts). |
| edge-apps/calendar/tsconfig.vitest.json | Remove Vitest TS config. |
| edge-apps/calendar/tsconfig.node.json | Remove node/tooling TS config. |
| edge-apps/calendar/tsconfig.json | Remove TS project references for the prior Vue setup. |
| edge-apps/calendar/tsconfig.app.json | Remove Vue app TS config. |
| edge-apps/calendar/src/utils.ts | Remove re-export utilities tied to the old blueprint/Vue setup. |
| edge-apps/calendar/src/test-setup.ts | Remove prior Vitest setup. |
| edge-apps/calendar/src/stores/settings.ts | Remove Pinia settings store. |
| edge-apps/calendar/src/stores/calendar.ts | Remove Pinia calendar store. |
| edge-apps/calendar/src/constants.ts | Remove old constants re-export. |
| edge-apps/calendar/src/components/tests/App.spec.ts | Remove Vue unit test. |
| edge-apps/calendar/src/assets/main.scss | Remove old SCSS styling tied to Vue blueprint layout. |
| edge-apps/calendar/src/App.vue | Remove Vue root component. |
| edge-apps/calendar/playwright.config.ts | Remove old Playwright config (now using shared screenshot helpers). |
| edge-apps/calendar/eslint.config.ts | Remove Vue/Vitest/Playwright-specific ESLint config (now via edge-apps-scripts). |
| edge-apps/calendar/e2e/vue.spec.ts | Remove old Vue-focused Playwright test. |
| edge-apps/calendar/e2e/tsconfig.json | Remove old e2e TS config. |
| edge-apps/calendar/.vscode/extensions.json | Remove Vue/Vitest editor recommendations. |
| edge-apps/calendar/screenshots/weekly-800x480.webp | Add updated weekly-mode screenshot artifact. |
| edge-apps/calendar/screenshots/weekly-720x1280.webp | Add updated weekly-mode screenshot artifact. |
| edge-apps/calendar/screenshots/weekly-480x800.webp | Add updated weekly-mode screenshot artifact. |
| edge-apps/calendar/screenshots/schedule-800x480.webp | Add updated schedule-mode screenshot artifact. |
| edge-apps/calendar/screenshots/schedule-720x1280.webp | Add updated schedule-mode screenshot artifact. |
| edge-apps/calendar/screenshots/schedule-480x800.webp | Add updated schedule-mode screenshot artifact. |
| edge-apps/calendar/screenshots/daily-800x480.webp | Add updated daily-mode screenshot artifact. |
| edge-apps/calendar/screenshots/daily-720x1280.webp | Add updated daily-mode screenshot artifact. |
| edge-apps/calendar/screenshots/daily-480x800.webp | Add updated daily-mode screenshot artifact. |
| edge-apps/calendar/screenshots/daily-1280x720.webp | Add updated daily-mode screenshot artifact. |
| edge-apps/calendar/screenshots/daily-1080x1920.webp | Add updated daily-mode screenshot artifact. |
| edge-apps/calendar/static/images/enable-google-calendar-api.png | Include static documentation image asset for setup instructions. |
| edge-apps/calendar/static/images/authorization-code.png | Include static documentation image asset for setup instructions. |
| edge-apps/calendar/src/assets/font/Aeonik-Regular.woff2 | Include font asset (legacy/compat). |
| edge-apps/calendar/src/assets/font/Aeonik-Regular.woff | Include font asset (legacy/compat). |
| edge-apps/calendar/public/fonts/Aeonik-Regular.woff2 | Include font asset served from public/. |
| edge-apps/calendar/public/fonts/Aeonik-Regular.woff | Include font asset served from public/. |
| edge-apps/calendar/public/favicon.ico | Include app favicon asset. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
edge-apps/edge-apps-library/src/components/weekly-calendar-view/weekly-calendar-view.ts
Outdated
Show resolved
Hide resolved
...edge-apps-library/src/components/calendar-views/weekly-calendar-view/weekly-calendar-view.ts
Show resolved
Hide resolved
edge-apps/edge-apps-library/src/components/weekly-calendar-view/weekly-calendar-view-utils.ts
Outdated
Show resolved
Hide resolved
edge-apps/edge-apps-library/src/components/daily-calendar-view/daily-calendar-view.ts
Outdated
Show resolved
Hide resolved
- Add white variant of screenly.svg to e2e/ - Set screenly_logo_light to a base64 data URI in screenshot tests - Regenerate screenshots Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Throttle now tick from 1s to 30s to reduce unnecessary re-renders - Replace JSON.parse for bypass_cors with getSettingWithDefault - Replace toLocaleString/parseInt with dayjs for hour/minute extraction - Move customElements.define into each calendar view component file - Remove redundant side-effect imports and define blocks from register.ts - Hoist ALLOWED_ATTRIBUTES to module-level constant in weekly-calendar-view-utils Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…re-renders - Fix filterEventsForWindow to use absolute datetimes, correctly including events overlapping the window from the left - Fix getEventStyle to use ms-based arithmetic instead of hour normalization, fixing clippedTop/clippedBottom and topPct/heightPct - Optimize weekly view now setter to only update time indicator position when window hour hasn't changed Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ecture - Extract `initTokenRefreshLoop` to edge-apps-library to avoid duplication - Remove local `initTokenRefreshLoop` from `google-calendar` and import from library - Add new `outlook-calendar` app based on `google-calendar` architecture - `src/main.ts`: identical setup flow, calls Microsoft Graph API fetcher - `src/events.ts`: fetch from Microsoft Graph API with dayjs timezone handling - Manifests copied from `outlook-calendar-old` with updated icon path - Screenshot e2e spec with Microsoft Graph API mock data - Rename old Vue-based app to `outlook-calendar-old` Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…sults - Add GRAPH_MAX_EVENTS constant set to 100 - Pass $top to /calendarview to override the default page size of 10 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…a and add screenshots - Replace 'Eastern Standard Time' with 'America/New_York' in mock response - Add initial screenshots for all three calendar modes across all resolutions Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
This PR migrates the calendar Edge Apps (iCal, Google, Outlook) from a Vue/Pinia implementation to framework-free Web Components, while adding reusable calendar view components (weekly/daily/schedule) and shared utilities to edge-apps-library. It also introduces screenshot-based Playwright coverage across multiple view modes and resolutions.
Changes:
- Replace Vue app shells with plain HTML/CSS/TS bootstraps that render
<schedule-calendar-view>,<weekly-calendar-view>, and<daily-calendar-view>. - Add reusable calendar view Web Components plus shared layout/windowing utilities (event clustering/column layout, 12-hour window logic, clipping, current-time indicator).
- Add shared utilities (timezone-aware date range helper, auto-scaler vertical centering, token refresh loop) and screenshot e2e tests.
Reviewed changes
Copilot reviewed 118 out of 240 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| edge-apps/outlook-calendar/src/main.ts | New framework-free bootstrap: selects active view, sets locale/timezone, refreshes events, starts token refresh loop. |
| edge-apps/outlook-calendar/src/events.ts | Refactors Graph event fetching to use shared date-range utility + calendar_id selection and $top. |
| edge-apps/google-calendar/src/main.ts | New framework-free bootstrap mirroring Outlook app flow with token refresh loop and view selection. |
| edge-apps/google-calendar/src/events.ts | Refactors Google Calendar fetching to shared date-range utility and runtime settings. |
| edge-apps/calendar/src/main.ts | New framework-free bootstrap for iCal app (active view selection, periodic refresh, locale/timezone setup). |
| edge-apps/calendar/src/events.ts | Refactors iCal fetching to shared date-range utility and typed settings input; improves error chaining. |
| edge-apps/*/index.html | Replaces Vue mount point with <auto-scaler> + header + three calendar view custom elements. |
| edge-apps/*/src/css/style.css | Adds base layout CSS and active view toggling for framework-free apps. |
| edge-apps/*/package.json | Swaps Vue/Vite-centric scripts/deps for shared edge-apps-scripts workflow; updates build/dev/test commands. |
| edge-apps/*/README.md | Updates setup/deploy/config/testing/screenshot docs for the new framework-free implementation. |
| edge-apps/*/e2e/screenshots.spec.ts | Adds screenshot-based Playwright coverage across modes and resolutions using shared screenshot helpers. |
| edge-apps/*/screenly.yml | Updates manifest icon paths to static/img/icon.svg. |
| edge-apps/*/screenly_qc.yml | Updates QC manifest icon paths to static/img/icon.svg. |
| edge-apps/edge-apps-library/src/utils/oauth.ts | Adds initTokenRefreshLoop() utility with exponential backoff semantics. |
| edge-apps/edge-apps-library/src/utils/screen.ts | Adds centerAutoScalerVertically() utility for fixed-orientation apps. |
| edge-apps/edge-apps-library/src/utils/screen.test.ts | Adds unit tests for centerAutoScalerVertically(). |
| edge-apps/edge-apps-library/src/utils/calendar.ts | Adds timezone-anchored getDateRangeForViewMode() shared calendar date-range helper. |
| edge-apps/edge-apps-library/src/utils/calendar.test.ts | Adds unit tests for getDateRangeForViewMode(). |
| edge-apps/edge-apps-library/src/types/index.ts | Introduces CalendarViewMode and CALENDAR_VIEW_MODE types/constants. |
| edge-apps/edge-apps-library/src/components/register.ts | Registers the new calendar view custom elements for global availability. |
| edge-apps/edge-apps-library/src/components/index.ts | Exports the new calendar view components (and CalendarEvent type) from the components entrypoint. |
| edge-apps/edge-apps-library/src/components/vite-env.d.ts | Adds *.css?inline typing for component CSS handling. |
| edge-apps/edge-apps-library/src/components/calendar-views/event-layout.ts | Adds overlap clustering + column/span layout computation used by daily/weekly views. |
| edge-apps/edge-apps-library/src/components/calendar-views/calendar-view-utils.ts | Adds shared DOM builders for gutters and event rendering (clipping/compact variants). |
| edge-apps/edge-apps-library/src/components/calendar-views/weekly-calendar-view/weekly-calendar-view-utils.ts | Adds weekly windowing helpers (time slots, window filtering, style computation). |
| edge-apps/edge-apps-library/src/components/calendar-views/weekly-calendar-view/weekly-calendar-view-styles.ts | Adds weekly view component CSS. |
| edge-apps/edge-apps-library/src/components/calendar-views/weekly-calendar-view/index.ts | Exports weekly view component entrypoint. |
| edge-apps/edge-apps-library/src/components/calendar-views/daily-calendar-view/daily-calendar-view.ts | Adds daily view custom element using shared layout/windowing and current-time indicator. |
| edge-apps/edge-apps-library/src/components/calendar-views/daily-calendar-view/daily-calendar-view-styles.ts | Adds daily view component CSS. |
| edge-apps/edge-apps-library/src/components/calendar-views/daily-calendar-view/index.ts | Exports daily view component entrypoint. |
| edge-apps/edge-apps-library/src/components/calendar-views/schedule-calendar-view/schedule-calendar-view.ts | Adds schedule view custom element (“Today/Tomorrow” list) using shared formatting. |
| edge-apps/edge-apps-library/src/components/calendar-views/schedule-calendar-view/schedule-calendar-view-styles.ts | Adds schedule view component CSS. |
| edge-apps/edge-apps-library/src/components/calendar-views/schedule-calendar-view/index.ts | Exports schedule view component entrypoint. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Set `default_value` to `''` instead of `primary` (a Google Calendar concept) - Update help text to clarify that leaving blank uses the default calendar Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… works - Remove try/catch from `refreshToken` in both google-calendar and outlook-calendar - Wrap only the initial startup call in try/catch to avoid crashing on first fetch - Previously, swallowed errors caused initTokenRefreshLoop to never apply exponential backoff or stop after repeated failures Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rusko124
left a comment
There was a problem hiding this comment.
1. Single-letter / abbreviated variable names
event-layout.ts:for (const e of cluster)— should beeventorclusterEventtzparameter used throughout all view components —timezonewould be more explicitschedule-calendar-view.ts:(e) => { ... }in.filter()calls — should useevent
2. Deep nesting / long functions
weekly-calendar-view.ts:_buildDayColumn()is ~60 lines mixing header construction, event filtering, layout lookup, and time indicator placement. Could extract_buildDayHeader()and_buildDayEventsArea().calendar-view-utils.ts:buildEventElement()is ~50 lines of DOM manipulation with anif (isCompact)branch — candidate for two builder functions.event-layout.ts:calculateClusterLayouts()does column assignment, column grouping, AND span calculation in one pass. Three distinct responsibilities in one function.
3. main.ts across all three apps is nearly identical.
The DOMContentLoaded handler in calendar/src/main.ts, google-calendar/src/main.ts, and outlook-calendar/src/main.ts share ~80% of the same code (scaler setup, theme, tick interval, element selection, active element logic). The only differences are token management and the fetch function. This could be a shared initCalendarApp() in the library with a fetchEvents callback parameter.
4. style.css is byte-for-byte identical across all three apps.
Should be a shared CSS file in edge-apps-library or imported from a common location.
5. getEventKey collision risk
event-layout.ts:181 — getEventKey uses startTime|endTime|title. Two events with the same title at the same time (e.g., recurring events across calendars) will collide and share a layout. Consider including a unique ID if available.
6. getWindowStartHour logic
weekly-calendar-view-utils.ts:16 — currentHour > 12 ? 13 : currentHour means at exactly noon, the window starts at hour 12 (12:00–00:00). At 13:00, it snaps to 13:00–01:00. There's a 1-hour window discontinuity. Is this intentional?
7. Schedule view hides ongoing events
schedule-calendar-view.ts — _getVisibleEvents filters today's events with start.isAfter(nowInTz), meaning events that started before "now" are hidden. A 2-hour meeting that started 30 minutes ago disappears from the schedule view.
8. calendar/src/main.ts:8 — (screenly.settings.calendar_mode as string) || 'schedule' accesses settings directly, while google-calendar and outlook-calendar use getSettingWithDefault('calendar_mode', 'schedule'). Should be consistent.
9. calendar-view-utils.ts:52 — the magic number (45 / 60) * (100 / 12) for the compact event threshold deserves a named constant.
…calendar views - Replace `tz` parameter/local variable with `timezone` across all calendar-view files - Replace single-letter `e` with `event` in filter callbacks in schedule-calendar-view Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Extract _buildDayHeader() and _buildDayEventsArea() from _buildDayColumn() - Extract buildCompactEventItem() and buildFullEventItem() from buildEventElement() - Split calculateClusterLayouts() into assignColumns(), groupByColumn(), and calculateColumnSpan() Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ollisions - Add optional `id` field to CalendarEvent interface - Prefer `id` over the startTime|endTime|title composite key in getEventKey - Pass uid from iCal, id from Google Calendar API, and id from Microsoft Graph API Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add comment explaining the window locks to 13:00 past noon intentionally Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…alendar-view - Extract TimeSlot, getWindowStartHour, generateTimeSlots, and filterEventsForWindow into calendar-window-utils.ts - Update daily-calendar-view and weekly-calendar-view to import from the new shared module - Remove cross-directory import from daily-calendar-view into weekly-calendar-view Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- fix filter to include events started before now but not yet ended - rename nowInTz to now to avoid abbreviated variable name - add ongoing event to screenshot fixtures in all three apps - regenerate screenshots for calendar, google-calendar, outlook-calendar Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- use getSettingWithDefault for calendar_mode in calendar/src/main.ts - extract COMPACT_THRESHOLD_PCT constant with explanatory comment - rename Pct suffix to Percent across all calendar-view files - rename nowInTz to currentTime to avoid abbreviated variable names Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- extract shared calendar-app.css to edge-apps-library/src/styles - add initCalendarApp() to edge-apps-library for shared app bootstrap logic - add getCalendarDateRange() to consolidate calendar_mode mapping and date range logic - replace per-app boilerplate in main.ts with initCalendarApp() - replace per-app style.css with @import from shared library Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Calender App Portaitd mode Is UI is not as expected, @nicomiguelino Please check that.
- change orientation="landscape" to orientation="auto" in all three apps - auto-scaler now detects viewport orientation and adapts accordingly - portrait viewports no longer forced into landscape letterbox layout - regenerate screenshots for all portrait resolutions Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- rename COMPACT_THRESHOLD_PCT to COMPACT_THRESHOLD_PERCENT - rename tz parameter to timezone in getDateRangeForViewMode Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

Summary
calendarapp from Vue 3 + Pinia to framework-free Web Componentscalendar-viewscomponents (weekly,daily,schedule) toedge-apps-librarygoogle-calendarapp to use shared Web Components fromedge-apps-libraryoutlook-calendarapp built on Microsoft Graph API using the same shared componentsChanges by app
edge-apps-librarycalendar-views/directory withweekly-calendar-view,daily-calendar-view, andschedule-calendar-viewcustom elementscalendar-view-utils.tsandevent-layout.tsfor layout computationCalendarEvent,CalendarViewMode, andCALENDAR_VIEW_MODEas shared typesgetDateRangeForViewModeto usedayjs(Date.now())so test mocks work correctlynowtick — only update time indicatorcalendarcalendar-viewscomponentstypes.ts; import shared types directly from@screenly/edge-appsgoogle-calendarcalendar-viewscomponents fromedge-apps-libraryCalendarEventtype withcolorIdfor Google-specific coloringoutlook-calendar/calendarviewAPI$top=100query param to avoid silent truncation of Graph API results (default page size is 10)